import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
import viteCompression from 'vite-plugin-compression'

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    viteCompression({
      algorithm: 'brotliCompress', // 使用 Brotli 压缩
      ext: '.br', // 压缩文件扩展名
    }),
  ],
  // 配置别名
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
    },
  },
  build: {
    // 生产环境构建输出目录
    outDir: 'dist',
    // 生成静态资源的存放路径
    assetsDir: 'assets',
    // 打包后是否生成 source map 文件
    sourcemap: false,
    // 小于此阈值的导入或引用资源将内联为 base64 编码，以减少 HTTP 请求
    assetsInlineLimit: 4096,
    // 启用/禁用 CSS 代码分割
    cssCodeSplit: true,
    // 构建后是否生成 manifest.json 文件
    manifest: false,
    chunkSizeWarningLimit: 1500, // 将警告阈值提高到 1000 KB
    // 自定义底层的 Rollup 打包配置
    rollupOptions: {
      // 可以在这里配置 Rollup 的输出选项，例如多入口打包等
      output: {
        // 手动指定 chunk 文件名
        chunkFileNames: 'assets/js/[name]-[hash].js',
        entryFileNames: 'assets/js/[name]-[hash].js',
        assetFileNames: 'assets/[ext]/[name]-[hash].[ext]',
        manualChunks(id) {
          if (id.includes('node_modules')) {
            if (id.includes('ant-design-vue')) {
              return 'vendor-antd' // 单独打包 ant-design-vue
            }
            if (id.includes('axios')) {
              return 'vendor-axios' // 单独打包 axios
            }
            return 'vendor' // 其他第三方库打包到 vendor
          }
        },
      },
    },
  },
})
